#include "Thread.hpp"
#include "LockGuard.hpp"
#include "ThreadPool.hpp"
#include "Task.hpp"
#include <unistd.h>
#include <memory>


// void* fun(void* args)
// {
//     std::string message = static_cast<const char*>(args);
//     while(true)
//     {
//         std::cout << message << std::endl;
//         sleep(1);
//     }
// }

// int main()
// {
//     lcl::Thread t1(fun, (void*)"thread 1 run");
//     lcl::Thread t2(fun, (void*)"thread 2 run");

//     t1.start();
//     t2.start();

//     t1.join();
//     t2.join();

//     return 0;
// }

int main()
{
    srand((unsigned int)time(nullptr));

    // std::unique_ptr<ThreadPool<CalTask>> tp(new ThreadPool<CalTask>);
    // 前面设置为静态的成员函数，可以通过类名来访问，不需要实例化对象访问
    ThreadPool<CalTask>* tp = ThreadPool<CalTask>::getInstance();
    tp->run();

    int x, y;
    char oper;
    while(true)
    {
        std::cout << "请输入数据1# ";
        std::cin >> x;
        std::cout << "请输入数据2# ";
        std::cin >> y;
        std::cout << "请输入你要进行的运算#";
        std::cin >> oper;
        // 构造一个任务
        CalTask t(x, y, oper, mymath);
        // 推入任务队列
        tp->push(t);
        sleep(1);
    }
    return 0;
}